package com.x.Part9_包装类;

import org.junit.jupiter.api.Test;

/**
 * ClassName: Test
 * Package: IntelliJ IDEA
 * Description:
 * 1、在有些场景下，需要使用基本数据类型对应的包装类的对象。此时就需要将基本数据类型的变量转换为
 * 包装类的对象。比如：ArrayList的add(Object obj);Object类的equals(Object obj)
 * 2、对于包装类来讲，既然我们使用的是对象，那么对象是不能进行加减乘除等运算的。
 * 为了能够进行这些运算，就需要将包装类的对象转换为基本数据类型的变量。
 * 3、装箱和拆箱比较频繁
 * Written by HanXu
 * Create 2024.03.16 14:39
 */
public class WrapperTest {


    @SuppressWarnings("removal")
    @Test
    public void test1() {
        int li = 10;
        //使用包装类，lii就是Integer对象实例
        Integer lii = new Integer(li);//JDK9已弃用
        System.out.println(lii);

        boolean b1 = true;
        Boolean bb = new Boolean(b1);
        System.out.println(bb);

        String s1 = "32.1f";
        Float f1 = new Float(s1);
        System.out.println(f1);


        //装箱操作
        //基本数据类型-->包装类

        //JDK推荐使用
        int i2 = 10;
        Integer ii2 = Integer.valueOf(i2);

        Boolean b2 = Boolean.valueOf("True");

        Float f2 = Float.valueOf(23.1f);
    }


    @Test
    public void test2() {

        //拆箱操作
        //包装类-->基本数据类型

        Integer ii2 = Integer.valueOf(10);
        int i2 = ii2.intValue();

        Boolean bb2 = Boolean.valueOf("True");
        boolean b2 = bb2.booleanValue();

        Float ff2 = Float.valueOf(23.1f);
        float f2 = ff2.floatValue();
    }

    @Test
    public void test3() {

        //自动装箱
        Integer l1 = 10;
        Boolean bi = true;
        Float fi = 12.3f;

        //自动拆箱
        int lli = l1;
        boolean bbi = bi;
    }

    @Test
    public void test4() {
        //基本数据类型、包装类-->String类型：调用String的重载的静态方法valveOf(Object obj)
        Boolean b1 = true;
        String str1 = String.valueOf(b1);
        System.out.println(str1);//"true"

        //String类型--->基本数据类型、包装类：调用包装类的静态方法：parseXXX()
        String s1 = "10";
        int i1 = Integer.parseInt(s1);
        System.out.println(i1+2);//12
    }
}


//自定义包装类
class MyInteger{
    int value;

    public MyInteger() {
    }

    public MyInteger(int value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return String.valueOf(value);
    }
}
